import wx from 'weixin-js-sdk'
import runXhr from "./http";

/**
 * JSAPI调起用户确认收款
 * @param packageInfo 跳转页面的package信息 - 商家转账付款单跳转收款页package信息,商家转账付款单受理成功时返回给商户
 * @returns {Promise<unknown>}
 */
function waitUserConfirmPay(packageInfo) {
  var token = window.localStorage.getItem("token");
  return new Promise((resolve, reject) => {
    const jsApiList = ['requestMerchantTransfer'];
    runXhr({
      method: 'GET',
      url: `api/v1/app/withdraw/merchantTransfer/config?token=${token}&url=${encodeURIComponent(window.location.href.split('#')[0])}`,
      headers: {'Content-Type': 'application/json' }
    }).then(result => {
      let config = result.data.data

      let appId =  config.appId
      let mchId = config.mchId
      console.log('appId---------->',appId)
      console.log('signature---------->',config.signature)
      wx.config({
        // debug:true,
        appId: appId, // 必填，公众号的唯一标识
        timestamp: config.timestamp.toString(), // 必填，生成签名的时间戳
        nonceStr: config.noncestr, // 必填，生成签名的随机串
        signature: config.signature, // 必填，签名
        jsApiList: ['requestMerchantTransfer']  // 必填，需要使用的JS接口列表，JSAPI调起用户确认收款
      })
     /* window.wx.ready(function () {
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
        console.log('微信调用ready')
        window.wx.checkJsApi({
          jsApiList,
          success: function (res) {
              // eslint-disable-next-line no-undef
            console.log("res---------->",res)
              WeixinJSBridge.invoke('requestMerchantTransfer', {
                  //商户号
                  mchId: mchId,
                  //appid
                  appId: appId,
                  package: packageInfo,
                },
                function (res) {
                  resolve(res);
                }
              );

          },
          fail: function(res) {
            reject({
              payFail: res
            })
          }
        });
      })
      wx.error(function (res) {
        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
        console.log('wxOpen微信调用错误' ,res)
        reject(new Error('微信配置错误'));
      })*/


      wx.ready(function () {
        wx.checkJsApi({
          jsApiList: ['requestMerchantTransfer'],
          success: function (res) {
            if (res.checkResult['requestMerchantTransfer']) {
              WeixinJSBridge.invoke('requestMerchantTransfer', {
                  mchId: mchId,
                  //appid
                  appId: appId,
                  package: packageInfo,
                },
                function (res) {
                  if (res.err_msg === 'requestMerchantTransfer:ok') {
                    // res.err_msg将在页面展示成功后返回应用时返回success，并不代表付款成功
                  }
                }
              );
            } else {
              //alert('你的微信版本过低，请更新至最新版本。');
            }
          }
        });
      });
    }).catch(error => {
      console.error('请求签名失败', error);
      reject(error);
    });

    wx.error(function(res){
      // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
      console.log('----------------->签名失败:',res)
    });


  });
}

export default waitUserConfirmPay

